home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 October
/
CHIP 1996 oktober (CD08).zip
/
CHIP_CD08.BIN
/
sac
/
pack
/
rar200sp.exe
/
rar
/
NOTASTEC.DOC
< prev
next >
Wrap
Text File
|
1995-09-27
|
10KB
|
379 lines
██████╗ █████╗ ██████╗
██╔══██╗ ██╔══██╗ ██╔══██╗ RAR versión 2.00 - Información Técnica
██████╔╝ ███████║ ██████╔╝ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
██╔══██╗ ██╔══██║ ██╔══██╗
██║ ██║ ██║ ██║ ██║ ██║
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
┌──────────────────────────────────────────────────┐
│ EL FORMATO DE ARCHIVO DESCRITO A CONTINUACION ES │
│ VALIDO SOLO PARA VERSIONES POSTERIORES A LA 1.50 │
└──────────────────────────────────────────────────┘
╔════════════════════════════════════════════════════════════════════════╗
║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Formato de los ficheros RAR ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════════════════════════════════════╝
Los ficheros están constituidos por bloques de longitud variable. El
orden de estos bloques puede variar, pero el primer bloque debe ser
siempre un bloque de identificación seguido de un bloque de cabecera de
archivo.
Cada bloque empieza con los siguientes campos:
HEAD_CRC 2 bytes CRC total o parcial del bloque
HEAD_TYPE 1 byte Tipo de bloque
HEAD_FLAGS 2 bytes Flags del bloque
HEAD_SIZE 2 bytes Tamaño del bloque
ADD_SIZE 4 bytes Tamaño del campo adicional
El campo ADD_SIZE sólo está presente si (HEAD_FLAGS & 0x8000) != 0
El tamaño total del bloque es HEAD_SIZE si (HEAD_FLAGS & 0x8000) == 0
y HEAD_SIZE+ADD_SIZE si el campo ADD_SIZE está presente - cuando
(HEAD_FLAGS & 0x8000) != 0.
En cada bloque los siguientes bits en HEAD_FLAGS tienen el mismo
significado:
0x4000 - Si está activado, viejas versiones de RAR ignorarán el
bloque y lo borrarán cuando el archivo sea actualizado.
Si está a cero, el bloque es copiado al nuevo archivo
cuando el archivo es actualizado.
0x8000 - Si está activado, el campo ADD_SIZE está presente y el
tamaño total del bloque es HEAD_SIZE+ADD_SIZE.
Tipos válidos de bloques:
HEAD_TYPE=0x72 bloque de identificación
HEAD_TYPE=0x73 cabecera de archivo
HEAD_TYPE=0x74 cabecera de fichero
HEAD_TYPE=0x75 cabecera de comentario
HEAD_TYPE=0x76 información extra
HEAD_TYPE=0x77 sub-bloque
HEAD_TYPE=0x78 protección
El bloque de comentario es usado actualmente sólo dentro de otros
bloques y no existe por separado.
El proceso del fichero se realiza de la siguiente forma:
1. Leer y comprobar bloque de identificación
2. Leer cabecera de archivo
3. Leer o saltar HEAD_SIZE-sizeof(MAIN_HEAD) bytes
4. Si se llegó al final del archivo entonces acaba el proceso
del archivo, si no, leer 7 bytes en los campos HEAD_CRC,
HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE.
5. Comprobar HEAD_TYPE.
Si es necesario leer el bloque:
si HEAD_TYPE==0x74
leer cabecera de fichero
( los primeros 7 bytes ya han sido leídos )
leer o saltar HEAD_SIZE-sizeof(FILE_HEAD) bytes
leer o saltar FILE_SIZE bytes
si no
leer el correspondiente bloque HEAD_TYPE:
leer HEAD_SIZE-7 bytes
si (HEAD_FLAGS & 0x8000)
leer ADD_SIZE bytes
Si no es necesario leer el bloque:
saltar HEAD_SIZE-7 bytes
si (HEAD_FLAGS & 0x8000)
saltar ADD_SIZE bytes
6. ir al punto 4.
╔════════════════════════════════════════════════════════════════════════╗
║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Formato de los bloques ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════════════════════════════════════╝
Bloque de identificación ( MARK_HEAD )
HEAD_CRC Siempre 0x6152
2 bytes
HEAD_TYPE Tipo de bloque: 0x72
1 byte
HEAD_FLAGS Siempre 0x1a21
2 bytes
HEAD_SIZE Tamaño del bloque = 0x0007
2 bytes
El bloque de identificación es actualmente considerado como una
secuencia fija de bytes: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
cabecera de archivo ( MAIN_HEAD )
HEAD_CRC CRC de los campos HEAD_TYPE a RESERVED2
2 bytes
HEAD_TYPE Tipo de bloque: 0x73
1 byte
HEAD_FLAGS Flags:
2 bytes
0x01 - Atributo de volumen (archivo multi-volumen)
0x02 - Comentario de archivo presente
0x04 - Atributo de bloqueo de archivo
0x08 - Atributo de solidez (archivo sólido)
0x10 - No usado
0x20 - Información de autenticidad presente
los demás bits de HEAD_FLAGS están reservados para
uso interno.
HEAD_SIZE Tamaño total del bloque incluyendo el archivo,
2 bytes comentarios y otros campos adicionales
RESERVED1 Reservado
2 bytes
RESERVED2 Reservado
4 bytes
Comentario presente si (HEAD_FLAGS & 0x02) != 0
cabecera de fichero (Fichero en el archivo)
HEAD_CRC CRC de los campos desde HEAD_TYPE a FILEATTR
2 bytes y el nombre del fichero
HEAD_TYPE Tipo de bloque: 0x74
1 byte
HEAD_FLAGS Flags:
2 bytes
0x01 - El fichero continúa del volumen anterior
0x02 - El fichero continúa en el siguiente volumen
0x04 - Fichero protegido con contraseña
0x08 - Comentario de fichero presente
0x10 - Se usa información del fichero anterior
(indicador de archivo sólido), sólo en
la versión 2.00 y posteriores
Bits 7 6 5 (RAR 2.0 y posteriores)
0 0 0 - diccionario de 64 Kb
0 0 1 - diccionario de 128 Kb
0 1 0 - diccionario de 256 Kb
0 1 1 - diccionario de 512 Kb
1 0 0 - diccionario de 1024 Kb
1 0 1 - reservado
1 1 0 - reservado
1 1 1 - el fichero es un directorio
(HEAD_FLAGS & 0x8000) == 1, debido a que el tamaño
total del bloque es HEAD_SIZE + PACK_SIZE
HEAD_SIZE Tamaño total del bloque incluyendo el nombre del
2 bytes fichero, comentarios y otros campos adicionales.
PACK_SIZE Tamaño del fichero comprimido
4 bytes
UNP_SIZE Tamaño del fichero sin comprimir
4 bytes
HOST_OS Sistema operativo usado para comprimir el archivo
1 byte 0 - MS DOS
1 - OS/2
2 - Win32
3 - Unix
FILE_CRC CRC del fichero
4 bytes
FTIME Fecha y hora en formato estandar MS DOS
4 bytes
UNP_VER Versión de RAR necesaria para extraer el fichero
1 byte
METHOD Método de compresión
1 byte
NAME_SIZE Tamaño del nombre de fichero
2 bytes
ATTR Atributos del fichero
4 bytes
FILE_NAME Nombre del fichero - cadena de longitud NAME_SIZE bytes
Comentario presente si (HEAD_FLAGS & 0x08) != 0
cabecera de comentario
HEAD_CRC CRC de los campos HEAD_TYPE a COMM_CRC
2 bytes
HEAD_TYPE Tipo de bloque: 0x75
1 byte
HEAD_FLAGS Flags
2 bytes
HEAD_SIZE Tamaño del bloque + tamaño del comentario
2 bytes
UNP_SIZE Tamaño del comentario sin comprimir
2 bytes
UNP_VER Versión de RAR necesaria para extraer el comentario
1 byte
METHOD Método de compresión
1 byte
COMM_CRC CRC del comentario
2 bytes
COMMENT Texto del comentario
Bloque de información extra
HEAD_CRC CRC del bloque
2 bytes
HEAD_TYPE Tipo de bloque: 0x76
1 byte
HEAD_FLAGS Flags
2 bytes
HEAD_SIZE Tamaño total del bloque
2 bytes
INFO Otros datos
Sub-bloque
Cualquier objecto del archivo (bloque o cabecera) puede ir seguido
de un sub-bloque. El sub-bloque depende del objecto principal y
puede ser borrado o movido a una nueva versión del archivo cuando
este es actualizado.
El sub-bloque contiene los siguientes campos:
HEAD_CRC CRC
2 bytes
HEAD_TYPE Tipo de cabecera: 0x77
1 byte
HEAD_FLAGS Flags
2 bytes
(HEAD_FLAGS & 0x8000) == 1, ya que el tamaño total
es HEAD_SIZE + DATA_SIZE
HEAD_SIZE Tamaño total del bloque
2 bytes
DATA_SIZE Tamaño total de los datos
4 bytes
SUB_TYPE Tipo de sub-bloque
2 bytes
RESERVED Siempre 0
1 byte
Otros Dependen del tipo de sub-bloque
campos
Sub-bloque para atributos extendidos de OS/2
HEAD_CRC CRC
2 bytes
HEAD_TYPE Tipo de cabecera: 0x77
1 byte
HEAD_FLAGS Flags
2 bytes
(HEAD_FLAGS & 0x8000) == 1, ya que el tamaño total
es HEAD_SIZE + DATA_SIZE
HEAD_SIZE Tamaño total del bloque
2 bytes
DATA_SIZE Tamaño total de los datos (tamaño de los
atributos comprimidos)
4 bytes
SUB_TYPE 0x100
2 bytes
RESERVED Siempre 0
1 byte
UNP_SIZE Tamaño sin comprimir de los atributos
4 bytes
UNP_VER Versión del RAR necesaria para descomprimir los
atributos
1 byte
METHOD Método de compresión
1 byte
EA_CRC CRC de los atributos
4 bytes
╔════════════════════════════════════════════════════════════════════════╗
║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Notas para aplicaciones ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════════════════════════════════════╝
1. Si en el futuro se añadiesen más bloques, su tamaño será incluido
en el campo HEAD_SIZE.
2. Para procesar archivos SFX es necesario saltar el módulo SFX
buscando el bloque de identificación en el archivo. No hay ninguna
secuencia de identificación (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) en
el módulo SFX.
Actualmente, el método más rápido para determinar si se trata de
un archivo Rar SFX es localizar la cadena 'RSFX' en el offset 0x1C.
El uso de este método, que no estaba documentado, no se asegurá
para futuras versiones de RAR.
3. El CRC se calcula usando el polinomio estándar 0xEDB88320. En
caso de que el tamaño del CRC sea de menos de 4 bytes, sólo los bytes
de orden más bajo serán usados.
4. Métodos de compresión:
0x30 - no comprimir
0x31 - compresión super-rápida
0x32 - compresión rápida
0x33 - compresión normal
0x34 - buena compresión
0x35 - compresión máxima
5. La versión necesaria para la extracción está codificada como
10 * versión mayor + versión menor.